# 13. 编码跟解码
# 编码跟解码
# 编码表
# ASCII 编码表-(嘛死特)
最早的编码,编码表中只有英文、大小写字母、数字、一些特殊字符
使用8位进制来表示:8位 = 1字节,由一个字节来表示
ascii编码只支持英文,不支持中文
python2默认使用ascii编码
# GBK 国标码
在国标码的编码表中包含了,ASCII 编码和中文常用的编码
使用16位进制来表示:8位 = 1字节,由二个字节来表示
# UNICODE 万国码-(U呢扣特)
在万国码的编码表中包含了全世界所有国家文字的编码
使用32位进制来表示:32位 = 4字节,由四个字节来表示
unicode万国码支持全球所有语言
# utf-8 (对unicode万国码进行压缩)
把unicode万国码表示32位进制,每8位进制为一单位,如果单位没有被使用,就会被压缩掉
utf-8 最少用1字节 = 8位,最多用4字节 = 32位表示
- 英文:8bit 1byte,1字节 = 8位
- 欧洲文字:16bit 2byte,2字节 = 16位
- 中文:24bit 3byte,3字节 = 24位
python3默认使用utf-8编码
# 文件编码
以什么编码保存,就要用什么编码方式打开,否则就会出现乱码
建议:在编写文件时,文件编码要使用utf-8格式
# python2支持utf-8
pythjon2中默认使用的ASCII码,所以不支持中文,如果需要在python2中更改编码,只需要在文件的头部加上一句
# -*- coding:utf-8 -*-
这样python2就把默认使用ascii编码改为utf-8编码
# 使用编码转换
在python3中,内存在程序运行阶段,使用的是unicode编码,因为unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于unicode比较浪费空间和资源,需要把unicode转存成UTF-8或GBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是BYTES(bytes)类型,也还是原来的数据只是经过编码之后表现形式发生改变而已
bytes的表现形式:
- 英文:b'hello' 英文的表现形式和字符串没什么区别
- 中文: b'\xe4\xb8\xad' 这是一个汉字的UTF-8的bytes表现形式
# 编码转换 - encode()
英文编码转换之后的结果和源字符串一致
中文编码转换之后 的结果根据编码的不同,编码结果也不同,一个中文的UTF-8编码是3个字节,一个GBK的中文编码是2个字节,
编码转换之后的类型就是bytes类型
在网络传输和存储的时候,python是保存和存储的bytes类型数据,那么在对方接收的时候,也是接收的bytes类型的数据,就需要使用decode() 来进行解码操作,把bytes类型的数据还原成熟悉的字符串
格式:变量.encode(编码格式) 或 变量 = 变量.encode(编码格式)
英文
s = "holle"
print(s.encode("utf-8"))
执行结果:
b'holle'
以上实例,把变量中的字符串进行转编码,转换成bytes类型的数据
中文
s = "你好"
print(s.encode("utf-8"))
执行结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
以上实例,把变量中的字符串进行转编码,转换成bytes类型的数据
# 使用解码转换 - decode()
接收的bytes类型的数据,就需要使用decode() 来进行解码操作,把bytes类型的数据还原成熟悉的字符串
格式:变量.decode(编码格式) 或 变量 = 变量.decode(编码格式)
so = "你好"
wo = so.encode("utf-8")
print(wo)
print(wo.decode("utf-8"))
执行结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
你好
以上实例,使用了编码转换跟解码转换的二个函数,简单实现了文件传输的编码转换跟解码转换